草庐IT

Android TextView 超链接

全部标签

c++ - 为什么即使我只使用 os api 也会自动链接 msvcrt.dll?

我正在使用vs2010,每当我构建任何Windows应用程序(不使用mfc或标准库-仅原始api)时,msvcrt.dll都会链接到它。有很多应用程序是在vs上编译的,但没有这种依赖性。如何从我的应用程序中删除msvcrt.dll依赖项。 最佳答案 那是C运行时库,没有运行时就无法构建C++程序。对于VisualStudio2010,您实际上会链接msvcr100.dll,因为这是该版本编译器的MSVC运行时。普通的旧msvcrt.dll是MSVC6运行时,现在作为Windows系统组件提供。如果您的可执行文件链接到msvcrt.d

c++ - 禁止导入库创建 - Visual C++ 链接器

是否有一种可能未记录的方法来阻止链接器为DLL或EXE创建IMPLIB,尽管源代码中有__declspec(dllexport)指令?不指定/IMPLIB会导致.LIB使用默认名称创建。当declspec指令来自不受控制的第3方代码时,这一点很重要。例如,boost::serialization就是这种情况。一种可能的解决方案是“取消声明”DLL导出的方法。DEF文件也不能这样做(AFAIK),因为它只能添加到导出列表而不能从中删除。 最佳答案 许多第3方代码不直接使用__declspec(dllexport),而是将其隐藏在宏下以

c++ - 为什么它不需要链接库?

#include#includeintmain(){printf("%f",roundf(3.14));}我编译上面的代码(没有使用-lm),添加使用ldda.out,结果是linux-vdso.so.1=>(0x00007fffab9ff000)libc.so.6=>/lib/x86_64-linux-gnu/libc.so.6(0x00007fd6da0f8000)/lib64/ld-linux-x86-64.so.2(0x00007fd6da4eb000)为什么a.out没有链接到libm但可以使用roundf(或类似sqrt的东西)?我已经使用nm来测试libc.so.6和ld

c++ - 为什么我必须为 LLVM 链接这些库两次?

我正在尝试编译示例LLVM程序。链接器步骤使用此命令。llvm-config-3.2--ldflags--libs这会产生以下命令。g++-obin/Debug/test-llvmobj/Debug/main.o-L/usr/lib/llvm-3.2/lib-lpthread-lffi-ldl-lm(aboatloadofLLVMlibrarieshere)但是,它无法链接。我收到这样的错误。undefinedreferencetoffi_type_float因此,我在末尾添加了-lffi和-ldl。g++-obin/Debug/test-llvmobj/Debug/main.o-L/

c++ - 使用带有静态 constexpr 的模板类时如何修复链接错误?

我有以下代码#includetemplateclassA{public:staticconstexprintarr[5]={1,2,3,4,5};};templateconstexprintA::arr[5];intmain(){Aa;std::cout编译顺利,但我有一个我不明白的链接错误g++-std=c++11test.cpp-otest/tmp/ccFL19bt.o:Infunction`main':test01.cpp:(.text+0xa):undefinedreferenceto`A::arr'collect2:error:ldreturned1exitstatus

c++ - PCL安装链接直接以某种方式 boost 安装目录

我在安装PCL时遇到了一个非常奇怪的问题。基本上我已经设置了PCL、boost、cmake、flann等。它们都能正确构建和编译。我复制并构建了ICPexample它构建得很好。这就是奇怪的地方。当我运行该应用程序时,出现以下错误:ldd:FATAL:Couldnotloadlibrarybin.v2/libs/system/build/qcc-4.4.2/release/threading-multi/libboost_system.so.1.48.0因此libboost_system.so.1.48.0存在于/usr/local/lib路径中,甚至更早地被同一个应用程序链接,即。如

c++ - 如何将多个 fma 操作链接在一起以提高性能?

假设在某些C或C++代码中我有一个名为Tfma(Ta,Tb,Tc)的函数,它像这样执行1次乘法和1次加法(a*b)+c;我应该如何优化多个mul&add步骤?例如,我的算法需要通过3或4个fma操作链接和求和来实现,我如何编写这种方法是一种有效的方法,我应该特别注意语法或语义的哪一部分?我还想在关键部分得到一些提示:避免更改CPU的舍入模式以避免刷新cpu管道。但我非常确定,在对fma的多次调用之间仅使用+操作不会改变这一点,我是说“非常确定”因为我没有太多的CPU来测试这个,我只是遵循一些合乎逻辑的步骤。我的算法类似于多个fma调用的总和fma(triplet1)+fma(tripl

c++ - 与 libcrypto : undefined reference to `__imp__CertFreeCertificateContext' 的链接问题

我正在尝试交叉编译cachecoin使用gitian的Linux主机上的二进制文件和i686-w64-mingw用于Windows目标。编译工作正常,直到依赖项的静态链接的最后一步。这是我得到的:/home/ubuntu/staging32/lib/libcrypto.a(e_capi.o):e_capi.c:(.text+0x1ff):undefinedreferenceto`__imp__CertFreeCertificateContext@4'Google建议它缺少-lcrypto链接甚至-lcrypt32。但是在它失败之前的最后一行中,您可以看到它正在链接两者。这里有什么问题?

c++ - 包括多个编译单元中的模板代码,它会一直链接而不是内联吗?

假设我在MyHeader.h中有模板代码,然后包含在2个编译单元中,A.cpp和B.cpp.然后这两个文件实例化相同的模板函数,比如f();(后者在MyHeader.h中定义了非内联)。据我所知,发生的事情如下。编译器生成f();的代码在两个A.obj和B.obj,然后喜欢者在链接阶段丢弃其中一个符号。我的问题:这种方法总是“安全”的吗?即,是否有链接器会提示重复符号?标准对此有任何说明吗?如果是,那么我看不到任何解决方案来制作我的所有模板函数inline. 最佳答案 这始终是安全的并且包含在ODR中。§3.2/6:Therecan

c++ - 在 Ubuntu 上提升单元测试动态链接

我正在尝试使用Boost的单元测试框架构建单元测试。我想将测试套件库与Boost提供的自动生成的测试模块动态链接起来。这是我一直在使用的基本结构:test_main.cpp:#defineBOOST_TEST_DYN_LINK#defineBOOST_TEST_MAIN#includelib_case.cpp:#defineBOOST_TEST_DYN_LINK#includeBOOST_AUTO_TEST_SUITE(test_lib)BOOST_AUTO_TEST_CASE(test_lib_case){BOOST_ASSERT(true);}BOOST_AUTO_TEST_SUI